package hirugarrenIterazioa;

import java.sql.*;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Vector;
/**
 * 
 * @author SI3taldea
 * 
 */
/**
 * 
 * Klase honetan datu basearekin erlazionatutako metodo guztiak daude.
 * 
 */
public class DBKudeatzailea {

	private Connection konexioa;
	private Statement sql1;
	private Statement sql2;
	private Statement sql3;
	private Statement sql4;
	private Statement sql5;
	
	/**
	 * Klasearen eraikitzailea, Metodo honek datu basearekin konexioa ezartzen du.
	 *
	 */
	public DBKudeatzailea(){
		
		try{
			Class.forName("com.mysql.jdbc.Driver");
			konexioa = DriverManager.getConnection("jdbc:mysql://localhost/eraikikon","ikasle01","ikasle01");
		}
		
		catch(Exception e){
			System.out.println("Errore bat gertatu da (0):"+e.toString());
		}
	}
		
	/**
	 * Pasatako erabiltzaile horren txartel identifikadorea bueltatuko digu, baldin eta txartelaren gaitze data 2 urte baino gehiago baditu.
	 * @param erab_id
	 * @return i-aurkitzen badu Integer bat eta null bestela
	 */
	public Integer execSQL2(Integer erab_id){
		Integer i = null;
		
		Calendar urtea=new GregorianCalendar();
    	urtea.setTime(new Date());
    	urtea.add(Calendar.YEAR, -2);
    	urtea.add(Calendar.MONTH, +1);
    	String data= urtea.get(Calendar.YEAR)+"-"+urtea.get(Calendar.MONTH)+"-"+urtea.get(Calendar.DATE)+" "+urtea.get(Calendar.HOUR)+":"+urtea.get(Calendar.MINUTE)+":"+urtea.get(Calendar.SECOND);
    	ResultSet r=null;
    	try {
    		sql2 = konexioa.createStatement();
    		
    		r=sql2.executeQuery("SELECT txartelID, erabiltzaileID " +
    				"FROM txartela NATURAL JOIN erabiltzailea " +
    				"WHERE gaituData <= '" + data +  "' AND erabiltzaileID="+ erab_id);
	    	while(r.next()){
	    		i=(Integer)r.getInt("txartelID");
	    	  
			
	    	}			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return 	i;
		}
	/**
	 * Zehaztutako azken hilabeteetan txartel batek izan dituen ukatutako sarbide eskaeren bektorea itzuliko du.
	 * @param txartel_id
	 * @param hilabeteKop
	 * @return seb-Vector<SarbideEskaera>
	 */
	public Vector<SarbideEskaera> execSQL3(Integer txartel_id,Integer hilabeteKop){
		Vector<SarbideEskaera> seb= new Vector<SarbideEskaera>();
		ResultSet r=null;
		SarbideEskaera se= new SarbideEskaera(null,null,null);
		Calendar hilabetea=new GregorianCalendar();
    	hilabetea.setTime(new Date());
    	hilabetea.add(Calendar.MONTH, -hilabeteKop+1);
    	String data= hilabetea.get(Calendar.YEAR)+"-"+hilabetea.get(Calendar.MONTH)+"-"+hilabetea.get(Calendar.DATE)+" "+hilabetea.get(Calendar.HOUR)+":"+hilabetea.get(Calendar.MINUTE)+":"+hilabetea.get(Calendar.SECOND);
		try {

			sql3 = konexioa.createStatement();
			r=sql3.executeQuery("SELECT txartelIrakurgailuID,erabiltzaileID,Count(*)AS ukapenak FROM sarbideeskaera NATURAL JOIN txartela WHERE txartelID=" + txartel_id + " AND data >= '" + data + "' AND baimenduta='e' GROUP BY txartelIrakurgailuID ORDER BY ukapenak DESC");
			while (r.next()){
				se.setBalioak((Integer)r.getInt("txartelIrakurgailuID"),(Integer)r.getInt("erabiltzaileID"),(Integer)r.getInt("ukapenak"));	
				seb.addElement(se);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return seb;		
	}
	/**
	 * Irakasleak diren erabiltzaileen identifikadoreen bektorea itzultzen da.
	 * @return er-Vector<Integer>
	 */
	
	public Vector<Integer> execSQL4(){
		Vector<Integer> er=new Vector<Integer>();
		ResultSet r=null;
		try {
			
			sql4 = konexioa.createStatement();
			r=sql4.executeQuery("SELECT erabiltzaileID FROM erabiltzailea NATURAL JOIN profila WHERE mota='irakaslea'");
			while(r.next()){
				er.addElement((Integer)r.getInt("erabiltzaileID"));
				
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return er;
	}
	/**
	 * Erabiltzaile baten identifikatzailea emanda erabiltzaile horri dagozkion datuak bueltatzen ditu Erabiltzaile klasean
	 * @param erab_id
	 * @return er-Erabiltzaile
	 */
	public Erabiltzaile execSQL5(Integer erab_id){
		Erabiltzaile er= new Erabiltzaile();
		ResultSet r=null;
		try {
			sql5= konexioa.createStatement();
			r= sql5.executeQuery("SELECT erabiltzaileID,izena,txartelID FROM erabiltzailea WHERE erabiltzaileID="+erab_id);
			while (r.next())
				er= new Erabiltzaile(r.getInt("erabiltzaileID"),r.getString("izena"),r.getInt("txartelID"));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return er;
		
	}
	/**
	 * Irakasle ukatuaren datuekin intzidentzia bat sortzen du. 
	 * @param iuz
	 */
	public void execSQL6(IrakasleUkatua iuz){
		ResultSet r=null;
		//Integer t=iuz.getErabID();
		Integer ti=iuz.getTxartelIrakurgailuID();
		Integer tx=iuz.getTxartelID();
		String probagindu = "INSERT INTO intzidentzia (mota,txartelID,TxartelIrakurgailuID) VALUES('irakasleGatazkatsua','"+tx+"','"+ti+"')";
		try {
			sql1= konexioa.createStatement();
			//datuak sartu behar dira
			sql1.executeUpdate(probagindu);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				
	}
	
	
	
	
}	